<!DOCTYPE html>
<html>
<head data-suburl="">
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
	
		<meta name="author" content="diogo" />
		<meta name="description" content="gnu-social - GNU social is a social communication software used in federated social networks. It is widely supported and has a large userbase. It is already used by the Free Software Foundation." />
		<meta name="keywords" content="go, git, self-hosted, gogs">
	
	<meta name="referrer" content="no-referrer" />
	<meta name="_csrf" content="Db2D5fl2PkW0vwzWYm8aw_fx4rA6MTYwNDc5MjExODI3NjA5OTA5OA==" />
	<meta name="_suburl" content="" />
	
	
	
		<meta property="og:url" content="https://notabug.org/diogo/gnu-social" />
		<meta property="og:type" content="object" />
		<meta property="og:title" content="diogo/gnu-social">
		<meta property="og:description" content="GNU social is a social communication software used in federated social networks. It is widely supported and has a large userbase. It is already used by the Free Software Foundation.">
		<meta property="og:image" content="https://notabug.org/avatars/12290" />
	

	<link rel="shortcut icon" href="/img/favicon.png" />

	<script src="/js/jquery-1.11.3.min.js"></script>
	<script src="/js/libs/jquery.are-you-sure.js"></script>
        <link href="/img/icon-48.ico" rel="icon" type="image/x-icon" />
        <link href="/img/icon-60.png" rel="apple-touch-icon">
        <link href="/img/icon-76.png" rel="apple-touch-icon" sizes="76x76">
        <link href="/img/icon-120.png" rel="apple-touch-icon" sizes="120x120">
        <link href="/img/icon-152.png" rel="apple-touch-icon" sizes="152x152">
        <link href="/img/icon-240.png" rel="apple-touch-icon" sizes="240x240">

	<link rel="stylesheet" href="/assets/font-awesome-4.6.3/css/font-awesome.min.css">
	<link rel="stylesheet" href="/assets/octicons-4.3.0/octicons.min.css">

	
	

	

	
	<link rel="stylesheet" href="/css/semantic-2.2.13.min.css">
	<link rel="stylesheet" href="/css/gogs.css?v=6fc9e85aa88133794d3434ea74aa557a">
	<link rel="stylesheet" href="/css/notabug.css">

	
	<script src="/js/semantic-2.2.13.min.js"></script>
	<script src="/js/gogs.js?v=6fc9e85aa88133794d3434ea74aa557a"></script>

	<title>[RFC] Core Plugins - NotABug.org: Free code hosting</title>

	<meta name="theme-color" content="#428bca">

	


<noscript><style>.nojs-popup:hover > .menu { display: block ; }</style></noscript>


</head>
<body>
	<div class="full height">
		<noscript>Please enable JavaScript in your browser!</noscript>

		
			<div id="header-div" class="following bar light">
				<div class="ui container">
					<div class="ui grid">
						<div class="column">
							<div class="ui top secondary menu">
								<a class="item brand" href="/">
									<img class="ui mini image" src="/img/favicon.png">
								</a>

								
									<a class="item" href="/">Home</a>
								

								<a class="item" href="/explore/repos">Explore</a>
								

								



									<a class="notabug-item item" href="/help" rel="noreferrer">Help</a>




									<div class="right menu">
										
											<a class="item" href="/user/sign_up">
												<i class="octicon octicon-person"></i> Register
											</a>
										
										<a class="item" href="/user/login?redirect_to=%2fdiogo%2fgnu-social%2fissues%2f32">
											<i class="octicon octicon-sign-in"></i> Sign In
										</a>
									</div>

								
							</div>
						</div>
					</div>
				</div>
			</div>
		


<div class="repository view issue pull">
	<div class="header-wrapper">

	<div class="ui container">
		<div class="ui vertically padded grid head">
			<div class="column">
				<div class="ui header">
					<div class="ui huge breadcrumb">
						<i class="mega-octicon octicon-repo"></i>
						<a href="/diogo">diogo</a>
						<div class="divider"> / </div>
						<a href="/diogo/gnu-social">gnu-social</a>
						
						
					</div>

					
						<div class="ui right">
							<div class="ui labeled button" tabindex="0">
								<a class="ui basic button" href="/diogo/gnu-social/action/watch?redirect_to=%2fdiogo%2fgnu-social%2fissues%2f32">
									<i class="icon fa-eye-slash"></i>Watch
								</a>
								<a class="ui basic label" href="/diogo/gnu-social/watchers">
									9
								</a>
							</div>
							<div class="ui labeled button" tabindex="0">
								<a class="ui basic button" href="/diogo/gnu-social/action/star?redirect_to=%2fdiogo%2fgnu-social%2fissues%2f32">
									<i class="icon fa-star-o"></i>Star
								</a>
								<a class="ui basic label" href="/diogo/gnu-social/stars">
									22
								</a>
							</div>
							
								<div class="ui labeled button" tabindex="0">
									<a class="ui basic button " href="/repo/fork/25974">
										<i class="octicon octicon-repo-forked"></i>Fork
									</a>
									<a class="ui basic label" href="/diogo/gnu-social/forks">
										21
									</a>
								</div>
							
						</div>
					
				</div>
			</div>
		</div>
	</div>


	<div class="ui tabs container">
		<div class="ui tabular menu navbar">
			
				<a class=" item" href="/diogo/gnu-social">
					<i class="octicon octicon-file-text"></i> Files
				</a>
			
			
				<a class="active item" href="/diogo/gnu-social/issues">
					<i class="octicon octicon-issue-opened"></i> Issues <span class="ui blue small label">73</span>
				</a>
			
			
				<a class=" item" href="/diogo/gnu-social/pulls">
					<i class="octicon octicon-git-pull-request"></i> Pull Requests <span class="ui blue small label">3</span>
				</a>
			
			
				<a class=" item" href="/diogo/gnu-social/wiki">
					<i class="octicon octicon-book"></i> Wiki
				</a>
			
			
		</div>
	</div>
	<div class="ui tabs divider"></div>

</div>

	<div class="ui container">
		<div class="navbar">
			<div class="ui compact small menu">
	<a class=" item" href="/diogo/gnu-social/labels">Labels</a>
	<a class=" item" href="/diogo/gnu-social/milestones">Milestones</a>
</div>

			<div class="ui right">
				
					<a class="ui green button" href="/diogo/gnu-social/issues/new">New Issue</a>
				
			</div>
		</div>
		<div class="ui divider"></div>
		
			<div>
				<div class="ui grid">
	
	
		<div class="sixteen wide column title">
	<div class="ui grid">
		<h1 class="twelve wide column">
			<span class="index">#32</span> <span id="issue-title" class="has-emoji">[RFC] Core Plugins</span>
			<div id="edit-title-input" class="ui input" style="display: none">
				<input value="[RFC] Core Plugins">
			</div>
		</h1>
		
	</div>
	
		<div class="ui red large label"><i class="octicon octicon-issue-closed"></i> Closed</div>
	

	
		
		<span class="time-desc">
			
				opened <span class="time-since" title="Mon, 22 Jul 2019 20:08:46 UTC">1 year ago</span> by <a href="/diogo">diogo</a>
			
			·
			3 comments
		</span>
	
	<div class="ui divider"></div>
</div>

	

	
	<div class="twelve wide column comment-list">
		<ui class="ui comments">
			<div class="comment">
				<a class="avatar" href="/diogo">
					<img src="/avatars/12290">
				</a>
				<div class="content">
					<div class="ui top attached header">
						<span class="text grey"><a href="/diogo">Diogo Cordeiro</a> commented <a href="#issue-63612"><span class="time-since" title="Mon, 22 Jul 2019 20:08:46 UTC">1 year ago</span></a></span>
						<div class="ui right actions">
							
						</div>
					</div>
					<div class="ui attached segment">
						<div class="render-content markdown has-emoji">
							
								<p>Maybe we should refactor core plugins to stay in a different directory, to better give the idea that they aren&#39;t mere plugins.</p>

<p>For the effects of this RFC, and until a better name is proposed, I&#39;ll name such core-plugins of modules (to reflect specialized functionality).</p>

<p>The heart of this issue is that I can&#39;t understand why the core plugins have been created... Why has this functionality been extracted from core to separate plugins? (<a href="/MMN-o" rel="nofollow">@MMN-o</a>)</p>

<p>Another thing that confuses me is:</p>

<ul>
<li>The core plugin list has been created in 19 Oct 2013: <a href="https://git.gnu.io/gnu/gnu-social/commit/2a5ba1f74bb428fc74f181f806aa786b04b48d0a" rel="nofollow">https://git.gnu.io/gnu/gnu-social/commit/2a5ba1f74bb428fc74f181f806aa786b04b48d0a</a> stating that they cannot been disabled.</li>
<li>The Favorite plugin was created in 24 Jun 2014: <a href="https://git.gnu.io/gnu/gnu-social/commit/db7cc7fa7553e0be302d518360648940756f131c" rel="nofollow">https://git.gnu.io/gnu/gnu-social/commit/db7cc7fa7553e0be302d518360648940756f131c</a> suggesting that it is optional.</li>
</ul>

<p>I think that we now have four options:</p>

<ol>
<li>Move everything to actual plugins (hard-work, requires making everything actually dynamic)</li>
<li>Re-integrated all the core plugins into core (hard-work, means reverting everything)</li>
<li>Refactor core plugins to &#34;modules&#34; and fix issues with the ActivityModeration plugin (reasonable, but it doesn&#39;t make sense to accept this change if there was no reason to extract core code to plugins) (other than avoiding the hard work)</li>
<li>Let&#39;s forget all this and do nothing</li>
</ol>

<p>About ActivityModeration: This one is listed as core but all the core-code related to notice elimination was not ported to the plugin, contrary to what was done with the Favorite plugin.</p>

							
						</div>
						<div class="raw-content hide">Maybe we should refactor core plugins to stay in a different directory, to better give the idea that they aren&#39;t mere plugins.

For the effects of this RFC, and until a better name is proposed, I&#39;ll name such core-plugins of modules (to reflect specialized functionality).

The heart of this issue is that I can&#39;t understand why the core plugins have been created... Why has this functionality been extracted from core to separate plugins? (@MMN-o)

Another thing that confuses me is:

* The core plugin list has been created in 19 Oct 2013: https://git.gnu.io/gnu/gnu-social/commit/2a5ba1f74bb428fc74f181f806aa786b04b48d0a stating that they cannot been disabled.
* The Favorite plugin was created in 24 Jun 2014: https://git.gnu.io/gnu/gnu-social/commit/db7cc7fa7553e0be302d518360648940756f131c suggesting that it is optional.

I think that we now have four options:

1. Move everything to actual plugins (hard-work, requires making everything actually dynamic)
2. Re-integrated all the core plugins into core (hard-work, means reverting everything)
3. Refactor core plugins to &#34;modules&#34; and fix issues with the ActivityModeration plugin (reasonable, but it doesn&#39;t make sense to accept this change if there was no reason to extract core code to plugins) (other than avoiding the hard work)
4. Let&#39;s forget all this and do nothing

About ActivityModeration: This one is listed as core but all the core-code related to notice elimination was not ported to the plugin, contrary to what was done with the Favorite plugin.
</div>
						<div class="edit-content-zone hide" data-write="issue-63612-write" data-preview="issue-63612-preview" data-update-url="/diogo/gnu-social/issues/32/content" data-context="/diogo/gnu-social"></div>
					</div>
					
				</div>
			</div>

			
				

				
				
					<div class="comment" id="issuecomment-15250">
						<a class="avatar" href="/diogo">
							<img src="/avatars/12290">
						</a>
						<div class="content">
							<div class="ui top attached header">
								<span class="text grey"><a href="/diogo">Diogo Cordeiro</a> commented <a href="#issuecomment-15250"><span class="time-since" title="Mon, 22 Jul 2019 21:00:44 UTC">1 year ago</span></a></span>
								<div class="ui right actions">
									
										<div class="item tag">
											
												Owner
											
										</div>
									
									
								</div>
							</div>
							<div class="ui attached segment">
								<div class="render-content markdown has-emoji">
									
										<p>For reference (raised by rozzin):</p>

<ul>
<li><a href="http://foldoc.org/module" rel="nofollow">http://foldoc.org/module</a></li>
<li><a href="http://foldoc.org/library" rel="nofollow">http://foldoc.org/library</a></li>
<li><a href="http://foldoc.org/plugin" rel="nofollow">http://foldoc.org/plugin</a></li>
</ul>

<blockquote>
<p>Why has this functionality been extracted from core to separate plugins?</p>
</blockquote>

<p>rozzin: If you look at changes when FavoritePlugin became a thing, for example... a lot of stuff got aggregated together more logically--the answer to &#34;where is the code implementing favorites?&#34; changed from &#34;oh, all over the place...&#34; to &#34;in plugins/Favorite&#34;.</p>

<p>rozzin:</p>

<pre><code>I think I&#39;d strongly suggest &#34;module&#34; over &#34;library&#34; for an application-level
mechanism like this.

But it might make sense to just move the &#34;core modules&#34; into subdirectories of lib.
e.g. lib/Favorite.

I just don&#39;t want to have to figure out linguistic constructs like &#34;these modules
in the modules directory are the non-modular modules and the plugins are
the modular modules&#34; :)

&#34;library&#34; has a lower-level connotation;
</code></pre>

<p>XRevan86:</p>

<pre><code>I think &#34;module&#34; is good.
modules are not necessarily non-essential.
</code></pre>

<p>Given that both directories (plugins and modules) would be in GNU social root, and &#34;modules are not necessarily
non-essential&#34;, it&#39;s maybe better to go with modules, as core-plugins might not be &#34;as lower-level&#34; as the other lib/ resources.</p>

									
								</div>
								<div class="raw-content hide">For reference (raised by rozzin):
* http://foldoc.org/module
* http://foldoc.org/library
* http://foldoc.org/plugin

&gt; Why has this functionality been extracted from core to separate plugins?

rozzin: If you look at changes when FavoritePlugin became a thing, for example... a lot of stuff got aggregated together more logically--the answer to &#34;where is the code implementing favorites?&#34; changed from &#34;oh, all over the place...&#34; to &#34;in plugins/Favorite&#34;.


rozzin:
    I think I&#39;d strongly suggest &#34;module&#34; over &#34;library&#34; for an application-level
    mechanism like this.
    
    But it might make sense to just move the &#34;core modules&#34; into subdirectories of lib.
    e.g. lib/Favorite.
    
    I just don&#39;t want to have to figure out linguistic constructs like &#34;these modules
    in the modules directory are the non-modular modules and the plugins are
    the modular modules&#34; :)
    
    &#34;library&#34; has a lower-level connotation;

XRevan86:
    I think &#34;module&#34; is good.
    modules are not necessarily non-essential.

Given that both directories (plugins and modules) would be in GNU social root, and &#34;modules are not necessarily
non-essential&#34;, it&#39;s maybe better to go with modules, as core-plugins might not be &#34;as lower-level&#34; as the other lib/ resources.
</div>
								<div class="edit-content-zone hide" data-write="issuecomment-15250-write" data-preview="issuecomment-15250-preview" data-update-url="/diogo/gnu-social/comments/15250" data-context="/diogo/gnu-social"></div>
							</div>
							
						</div>
					</div>
				

			
				

				
				
					<div class="comment" id="issuecomment-15269">
						<a class="avatar" href="/diogo">
							<img src="/avatars/12290">
						</a>
						<div class="content">
							<div class="ui top attached header">
								<span class="text grey"><a href="/diogo">Diogo Cordeiro</a> commented <a href="#issuecomment-15269"><span class="time-since" title="Tue, 23 Jul 2019 22:24:51 UTC">1 year ago</span></a></span>
								<div class="ui right actions">
									
										<div class="item tag">
											
												Owner
											
										</div>
									
									
								</div>
							</div>
							<div class="ui attached segment">
								<div class="render-content markdown has-emoji">
									
										<pre><code>includeals&gt; &gt; [rozzin] I&#39;m kind of liking the &#34;just put the core modules into lib along with all of the other `library&#39; code&#34;.
&lt;includeals&gt; As said eariler, I don&#39;t dislike that path either. But at an implementation level, not everything in a module is library code, in fact, modules haver their own lib/ as well as action/, etc.
&lt;includeals&gt; `modules` are more generic, which is good also, with v2 structured divided in includes and public, modules makes it easier to respect that structure.
&lt;includeals&gt; &gt; &lt;lnxw37d4&gt; So how about /plugins for 3rd party optional modules; /modules/optional for optional modules included with GS &amp; maintained by the project; /modules/core for required modules? Abandoned or unmaintained modules could go in a separate repo, so admins would know that they may not work or may be insecure.
&lt;includeals&gt; We already have local/ for 3rd party optional modules, if we can keep backwards compatible without seriously bad consequences, we should
&lt;includeals&gt; &gt; &lt;dansup&gt; IMO plugins should become their own packages/git repos, that way, they can be maintained without having to require core updates
&lt;includeals&gt; I confess I have mixed feelings about this... But lets leave that for another discussion.
&lt;includeals&gt; rozzin: Also, modules still make use of the plugins system, the real twist is that they cannot be turned off
&lt;xmpp-gnu&gt; [rozzin] more like &#34;plugins make use of the module system&#34;
&lt;xmpp-gnu&gt; [rozzin] the awkwardness in GNU social WRT `some weird things that are &#34;plugins&#34; are things that are strange to be &#34;plugins&#34;&#39; seems to be that the codebase from StatusNet generally had a lot of spaghetti to it, and the only place where was initially any attempt at providing any sort of clean organization was for plugins
&lt;xmpp-gnu&gt; [rozzin] because you can&#39;t really even do actual plugins (i.e. drop-in/addon-on modules that might be developed/maintained outside of your project) if you don&#39;t have any sort of module system
&lt;xmpp-gnu&gt; [rozzin] but aside from plugins, I don&#39;t think StatusNet really cared about modularity / separation of concerns (or really `design&#39; in general, I guess...)
&lt;xmpp-gnu&gt; [rozzin] so they called their modules &#34;plugins&#34; and they called the API the &#34;plugin&#34; API..., because that&#39;s the only kind of modules they had.
&lt;xmpp-gnu&gt; [rozzin] And I think mmn just didn&#39;t bother trying to fight/convert the terminology when he started refactoring everything to have better boundaries.
&lt;xmpp-gnu&gt; [rozzin] &#34;whether they&#39;re called Plugins or Modules&#34; was kind of the least of the concerns around that time--
&lt;xmpp-gnu&gt; [rozzin] there was a lot of stuff that just didn&#39;t even work right, IIRC.
&lt;xmpp-gnu&gt; [rozzin] and then we&#39;d start trying to fix that stuff, and run into that `wait where is the code for that even located?&#39; issue.
&lt;xmpp-gnu&gt; [rozzin] I can&#39;t really say what was going on in mmn&#39;s head at the time, but I&#39;d say something like &#34;OMG. It&#39;s spread out all over the place? Again? I&#39;m just going to separate this stuff out now, because I can&#39;t maintain this otherwise&#34; is probably a good guess.
</code></pre>

									
								</div>
								<div class="raw-content hide">    includeals&gt; &gt; [rozzin] I&#39;m kind of liking the &#34;just put the core modules into lib along with all of the other `library&#39; code&#34;.
    &lt;includeals&gt; As said eariler, I don&#39;t dislike that path either. But at an implementation level, not everything in a module is library code, in fact, modules haver their own lib/ as well as action/, etc.
    &lt;includeals&gt; `modules` are more generic, which is good also, with v2 structured divided in includes and public, modules makes it easier to respect that structure.
    &lt;includeals&gt; &gt; &lt;lnxw37d4&gt; So how about /plugins for 3rd party optional modules; /modules/optional for optional modules included with GS &amp; maintained by the project; /modules/core for required modules? Abandoned or unmaintained modules could go in a separate repo, so admins would know that they may not work or may be insecure.
    &lt;includeals&gt; We already have local/ for 3rd party optional modules, if we can keep backwards compatible without seriously bad consequences, we should
    &lt;includeals&gt; &gt; &lt;dansup&gt; IMO plugins should become their own packages/git repos, that way, they can be maintained without having to require core updates
    &lt;includeals&gt; I confess I have mixed feelings about this... But lets leave that for another discussion.
    &lt;includeals&gt; rozzin: Also, modules still make use of the plugins system, the real twist is that they cannot be turned off
    &lt;xmpp-gnu&gt; [rozzin] more like &#34;plugins make use of the module system&#34;
    &lt;xmpp-gnu&gt; [rozzin] the awkwardness in GNU social WRT `some weird things that are &#34;plugins&#34; are things that are strange to be &#34;plugins&#34;&#39; seems to be that the codebase from StatusNet generally had a lot of spaghetti to it, and the only place where was initially any attempt at providing any sort of clean organization was for plugins
    &lt;xmpp-gnu&gt; [rozzin] because you can&#39;t really even do actual plugins (i.e. drop-in/addon-on modules that might be developed/maintained outside of your project) if you don&#39;t have any sort of module system
    &lt;xmpp-gnu&gt; [rozzin] but aside from plugins, I don&#39;t think StatusNet really cared about modularity / separation of concerns (or really `design&#39; in general, I guess...)
    &lt;xmpp-gnu&gt; [rozzin] so they called their modules &#34;plugins&#34; and they called the API the &#34;plugin&#34; API..., because that&#39;s the only kind of modules they had.
    &lt;xmpp-gnu&gt; [rozzin] And I think mmn just didn&#39;t bother trying to fight/convert the terminology when he started refactoring everything to have better boundaries.
    &lt;xmpp-gnu&gt; [rozzin] &#34;whether they&#39;re called Plugins or Modules&#34; was kind of the least of the concerns around that time--
    &lt;xmpp-gnu&gt; [rozzin] there was a lot of stuff that just didn&#39;t even work right, IIRC.
    &lt;xmpp-gnu&gt; [rozzin] and then we&#39;d start trying to fix that stuff, and run into that `wait where is the code for that even located?&#39; issue.
    &lt;xmpp-gnu&gt; [rozzin] I can&#39;t really say what was going on in mmn&#39;s head at the time, but I&#39;d say something like &#34;OMG. It&#39;s spread out all over the place? Again? I&#39;m just going to separate this stuff out now, because I can&#39;t maintain this otherwise&#34; is probably a good guess.
</div>
								<div class="edit-content-zone hide" data-write="issuecomment-15269-write" data-preview="issuecomment-15269-preview" data-update-url="/diogo/gnu-social/comments/15269" data-context="/diogo/gnu-social"></div>
							</div>
							
						</div>
					</div>
				

			
				

				
				
					<div class="comment" id="issuecomment-15270">
						<a class="avatar" href="/diogo">
							<img src="/avatars/12290">
						</a>
						<div class="content">
							<div class="ui top attached header">
								<span class="text grey"><a href="/diogo">Diogo Cordeiro</a> commented <a href="#issuecomment-15270"><span class="time-since" title="Tue, 23 Jul 2019 22:27:22 UTC">1 year ago</span></a></span>
								<div class="ui right actions">
									
										<div class="item tag">
											
												Owner
											
										</div>
									
									
								</div>
							</div>
							<div class="ui attached segment">
								<div class="render-content markdown has-emoji">
									
										<p>Relevant commits:</p>

<ol>
<li> <code><a href="https://notabug.org/diogo/gnu-social/commit/4cee29ab5c1317f1794ae45dc85591670ad15d06" rel="nofollow">4cee29ab5c</a></code></li>
<li> <code><a href="https://notabug.org/diogo/gnu-social/commit/af31848400531406a18cacc66b1f4b8753254568" rel="nofollow">af31848400</a></code></li>
</ol>

<p>1.</p>

<blockquote>
<p>[CORE] Move core plugins to a new modules directory</p>

<p>For reference (raised by rozzin in IRC):</p>

<ul>
<li><a href="http://foldoc.org/module" rel="nofollow">http://foldoc.org/module</a></li>
<li><a href="http://foldoc.org/library" rel="nofollow">http://foldoc.org/library</a></li>
<li><a href="http://foldoc.org/plugin" rel="nofollow">http://foldoc.org/plugin</a></li>
</ul>

<p>As noted by XRevan86, modules are not necessarily non-essential.
As we will keep the modules directory in GS root [therefore, near to
plugins/], it is evidenced the difference between both.</p>

<p>This is a simple yet fundamental structural change. It doesn&#39;t change
functionality but makes clearer the way we understand GNU social&#39;s
internals.</p>
</blockquote>

<p>2.</p>

<blockquote>
<p>[CORE] Refactor Plugin API to Module API</p>
</blockquote>

									
								</div>
								<div class="raw-content hide">Relevant commits:

1. https://notabug.org/diogo/gnu-social/commit/4cee29ab5c1317f1794ae45dc85591670ad15d06
2. https://notabug.org/diogo/gnu-social/commit/af31848400531406a18cacc66b1f4b8753254568

1.

&gt; [CORE] Move core plugins to a new modules directory
&gt; 
&gt; For reference (raised by rozzin in IRC):
&gt; 
&gt; * http://foldoc.org/module
&gt; * http://foldoc.org/library
&gt; * http://foldoc.org/plugin
&gt; 
&gt; As noted by XRevan86, modules are not necessarily non-essential.
&gt; As we will keep the modules directory in GS root [therefore, near to
&gt; plugins/], it is evidenced the difference between both.
&gt; 
&gt; This is a simple yet fundamental structural change. It doesn&#39;t change
&gt; functionality but makes clearer the way we understand GNU social&#39;s
&gt; internals.

2.

&gt; [CORE] Refactor Plugin API to Module API
</div>
								<div class="edit-content-zone hide" data-write="issuecomment-15270-write" data-preview="issuecomment-15270-preview" data-update-url="/diogo/gnu-social/comments/15270" data-context="/diogo/gnu-social"></div>
							</div>
							
						</div>
					</div>
				

			
				

				
				
					<div class="event">
						<span class="octicon octicon-circle-slash"></span>
						<a class="ui avatar image" href="/diogo">
							<img src="/avatars/12290">
						</a>
						<span class="text grey"><a href="/diogo">diogo</a> closed <a id="event-15271" href="#event-15271"><span class="time-since" title="Tue, 23 Jul 2019 22:27:22 UTC">1 year ago</span></a></span>
					</div>
				

			

			

			
				<div class="ui warning message">
					<a href="/user/login?redirect_to=/diogo/gnu-social/issues/32">Sign in</a> to join this conversation.
				</div>
			
		</ui>
	</div>

	<div class="four wide column">
		<div class="ui segment metas">
			<div class="ui disabled floating jump select-label dropdown">
				<span class="text">
					<strong>Labels</strong>
					<span class="octicon octicon-gear"></span>
				</span>
				<div class="filter menu" data-action="update" data-update-url="/diogo/gnu-social/issues/32/label">
					<div class="no-select item">Clear labels</div>
					
						<a class=" item" href="#" data-id="1564" data-id-selector="#label_1564"><span class="octicon "></span><span class="label color" style="background-color: #fbca04"></span> bounty</a>
					
						<a class=" item" href="#" data-id="1483" data-id-selector="#label_1483"><span class="octicon "></span><span class="label color" style="background-color: #ee0701"></span> bug</a>
					
						<a class=" item" href="#" data-id="1484" data-id-selector="#label_1484"><span class="octicon "></span><span class="label color" style="background-color: #cccccc"></span> duplicate</a>
					
						<a class=" item" href="#" data-id="1485" data-id-selector="#label_1485"><span class="octicon "></span><span class="label color" style="background-color: #84b6eb"></span> enhancement</a>
					
						<a class=" item" href="#" data-id="1486" data-id-selector="#label_1486"><span class="octicon "></span><span class="label color" style="background-color: #128a0c"></span> help wanted</a>
					
						<a class=" item" href="#" data-id="1487" data-id-selector="#label_1487"><span class="octicon "></span><span class="label color" style="background-color: #e6e6e6"></span> invalid</a>
					
						<a class=" item" href="#" data-id="1488" data-id-selector="#label_1488"><span class="octicon "></span><span class="label color" style="background-color: #cc317c"></span> question</a>
					
						<a class="checked item" href="#" data-id="1565" data-id-selector="#label_1565"><span class="octicon octicon-check"></span><span class="label color" style="background-color: #d4c5f9"></span> RFC</a>
					
						<a class=" item" href="#" data-id="1841" data-id-selector="#label_1841"><span class="octicon "></span><span class="label color" style="background-color: #0052cc"></span> v3</a>
					
						<a class=" item" href="#" data-id="1489" data-id-selector="#label_1489"><span class="octicon "></span><span class="label color" style="background-color: #ffffff"></span> wontfix</a>
					
				</div>
			</div>
			<div class="ui labels list">
				<span class="no-select item hide">No Label</span>
				
					<div class="item">
						<a class="ui label hide" id="label_1564" href="/diogo/gnu-social/issues?labels=1564" style="color: #000; background-color: #fbca04">bounty</a>
					</div>

				
					<div class="item">
						<a class="ui label hide" id="label_1483" href="/diogo/gnu-social/issues?labels=1483" style="color: #fff; background-color: #ee0701">bug</a>
					</div>

				
					<div class="item">
						<a class="ui label hide" id="label_1484" href="/diogo/gnu-social/issues?labels=1484" style="color: #000; background-color: #cccccc">duplicate</a>
					</div>

				
					<div class="item">
						<a class="ui label hide" id="label_1485" href="/diogo/gnu-social/issues?labels=1485" style="color: #000; background-color: #84b6eb">enhancement</a>
					</div>

				
					<div class="item">
						<a class="ui label hide" id="label_1486" href="/diogo/gnu-social/issues?labels=1486" style="color: #fff; background-color: #128a0c">help wanted</a>
					</div>

				
					<div class="item">
						<a class="ui label hide" id="label_1487" href="/diogo/gnu-social/issues?labels=1487" style="color: #000; background-color: #e6e6e6">invalid</a>
					</div>

				
					<div class="item">
						<a class="ui label hide" id="label_1488" href="/diogo/gnu-social/issues?labels=1488" style="color: #fff; background-color: #cc317c">question</a>
					</div>

				
					<div class="item">
						<a class="ui label " id="label_1565" href="/diogo/gnu-social/issues?labels=1565" style="color: #000; background-color: #d4c5f9">RFC</a>
					</div>

				
					<div class="item">
						<a class="ui label hide" id="label_1841" href="/diogo/gnu-social/issues?labels=1841" style="color: #fff; background-color: #0052cc">v3</a>
					</div>

				
					<div class="item">
						<a class="ui label hide" id="label_1489" href="/diogo/gnu-social/issues?labels=1489" style="color: #000; background-color: #ffffff">wontfix</a>
					</div>

				
			</div>

			<div class="ui divider"></div>

			<div class="ui disabled floating jump select-milestone dropdown">
				<span class="text">
					<strong>Milestone</strong>
					<span class="octicon octicon-gear"></span>
				</span>
				<div class="menu" data-action="update" data-update-url="/diogo/gnu-social/issues/32/milestone">
					<div class="no-select item">Clear milestone</div>
					
					
				</div>
			</div>
			<div class="ui select-milestone list">
				<span class="no-select item ">No Milestone</span>
				<div class="selected">
					
				</div>
			</div>

			<div class="ui divider"></div>

			<input id="assignee_id" name="assignee_id" type="hidden" value="">
			<div class="ui disabled floating jump select-assignee dropdown">
				<span class="text">
					<strong>Assignee</strong>
					<span class="octicon octicon-gear"></span>
				</span>
				<div class="menu" data-action="update" data-update-url="/diogo/gnu-social/issues/32/assignee">
					<div class="no-select item">Clear assignee</div>
					
				</div>
			</div>
			<div class="ui select-assignee list">
				<span class="no-select item ">No assignee</span>
				<div class="selected">
					
				</div>
			</div>

			<div class="ui divider"></div>

			<div class="ui participants">
				<span class="text"><strong>1 Participants</strong></span>
				<div>
					
						<a href="/diogo">
							<img class="ui avatar image poping up" src="/avatars/12290" data-content="Diogo Cordeiro" data-position="top center" data-variation="small inverted">
						</a>
					
				</div>
			</div>
		</div>
	</div>
</div>

<div class="hide" id="edit-content-form">
	<div class="ui comment form">
		<div class="ui top attached tabular menu">
			<a class="active write item">Write</a>
			<a class="preview item" data-url="/api/v1/markdown" data-context="/diogo/gnu-social">Preview</a>
		</div>
		<div class="ui bottom attached active write tab segment">
			<textarea tabindex="1" id="content" name="content"></textarea>
		</div>
		<div class="ui bottom attached tab preview segment markdown">
			Loading...
		</div>
		<div class="text right edit buttons">
			<div class="ui basic blue cancel button" tabindex="3">Cancel</div>
			<div class="ui green save button" tabindex="2">Save</div>
		</div>
	</div>
</div>

<div class="hide" id="no-content">
	<span class="no-content">There is no content yet.</span>
</div>

			</div>
		
	</div>
</div>

	</div>
	<footer>
		<div class="ui container">
			<div class="ui left">



				<a href="/tos">Terms of Service</a>
				&bull;
				<a href="/about">About us</a>
				&bull;
				<a href="/outages">Outages</a>
				&bull;
				<a href="/hp/gogs/issues">Report a problem</a>
				&bull;
				<a href="/assets/librejs/librejs.html" data-jslicense="1">Javascript licenses</a>
				&bull;
				<a href="/fingerprints">SSH Fingerprints</a>



			</div>
			<div class="ui right links">
				
				<div class="ui language bottom floating slide up dropdown link item">
					<i class="world icon"></i>
					<div class="text">English</div>
					<div class="menu">
						
							<a class="item active selected" href="#">English</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=zh-CN">简体中文</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=zh-HK">繁體中文（香港）</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=zh-TW">繁體中文（臺灣）</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=de-DE">Deutsch</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=fr-FR">français</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=nl-NL">Nederlands</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=lv-LV">latviešu</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=ru-RU">русский</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=ja-JP">日本語</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=es-ES">español</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=pt-BR">português do Brasil</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=pl-PL">polski</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=bg-BG">български</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=it-IT">italiano</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=fi-FI">suomi</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=tr-TR">Türkçe</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=cs-CZ">čeština</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=sr-SP">српски</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=sv-SE">svenska</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=ko-KR">한국어</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=gl-ES">galego</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=uk-UA">українська</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=en-GB">English (United Kingdom)</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=hu-HU">Magyar</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=sk-SK">Slovenčina</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=id-ID">Indonesian</a>
						
							<a class="item " href="/diogo/gnu-social/issues/32?lang=fa-IR">Persian</a>
						
					</div>
				</div>



				
			</div>
		</div>
	</footer>
</body>



	<link rel="stylesheet" href="/plugins/highlight-9.6.0/github.css">
	<script src="/plugins/highlight-9.6.0/highlight.pack.js"></script>




	<link rel="stylesheet" href="/plugins/dropzone-4.2.0/dropzone.css">
	<script src="/plugins/dropzone-4.2.0/dropzone.js"></script>

<script src="/js/libs/emojify-1.1.0.min.js"></script>
<script src="/js/libs/clipboard-1.5.9.min.js"></script>
	
</html>

